草庐IT

Android Proguard 不内联

全部标签

c++ - 创建内联 std::string

是否可以在不创建变量的情况下初始化std::string?我希望完成的事情:throwstd::runtime_error("Error:"+strerror(errno));我目前在做什么:std::stringerror="Error:";std::stringerrmsg(strerror(errno));throwstd::runtime_error(error+errmsg); 最佳答案 只是用其中之一做一个临时的:throwstd::runtime_error(std::string("Error:")+strerror

c++ - gcc 警告未使用的静态函数,但不是静态内联 : is there a practical distinction?

我的gcc版本(5.4)会警告未使用的static函数,即使在使用-Wall的头文件中也是如此。如果相同的函数定义为staticinline或只是inline,它不会提示。例如,文件unused.h中的以下函数:staticvoidfoo(){}...当包含在test.cpp文件中时,如下所示:#include"unused.h"当使用-Wall编译器时生成以下编译器诊断:Infileincludedfromtest.cpp:11:0:unused.h:Atglobalscope:unused.h:9:13:warning:‘voidfoo()’definedbutnotused[-W

c++ - std::functions 是否由 C++11 编译器内联?

我正在使用C++11开发一个小型数学优化框架,我想知道用户提供特定领域逻辑的最佳方式是什么。我可以强制她用框架可以调用的钩子(Hook)方法定义类,但我想保持精简并尽可能利用新的C++11工具。所以我正在考虑接受可能从lambda表达式实例化的std::function对象作为参数,并在需要时调用它们。我唯一想知道的是编译器(在我的例子中是gcc,但我也想了解Xcode和VisualC++)是否能够获取std::function对象并内联函数定义,以便它们与其余代码一起优化。PS:从评论来看,我的问题的第一次修改对大多数用户来说似乎是晦涩难懂的,这可能是我使用了不正确的语言的错。所以我

c++ - 内联 lambda 是否会遭受与函数指针间接寻址相同的延迟

//approach1templatevoidf1(Tt,inta,intb){t(a,b);}//approach2voidf2(void(*g)(int,int),inta,intb){g(a,b);}voidg(inta,intb){//dosomething}intmain(){f1([](inta,intb){//dosomething},1,2);f2(&g,1,2);}我的问题是,f1和f2是否遭受相同的间接寻址延迟以获取要执行的函数的地址(假定lambda实现为函数对象)?如果lambda不是内联的怎么办?注意:我将函数f1声明为模板,以便将参数lambda类型的推导留

c++ - 为什么有内联函数声明而不是内联函数调用?

C++(和其他各种语言)支持内联函数。如果我想让一个函数内联,我必须在声明中使用inline关键字。对我来说,这个接缝很不直观:为什么我不能在调用函数时只使用inline?示例:voidfoo(){...}inlinefoo();代替inlinevoidfoo(...){...}foo();这将允许我仅在特定位置内联该函数,而无需复制该函数。此外,每个函数都可以内联,这将使机制更加灵活。有没有不支持的原因? 最佳答案 前言:内联函数即内联即内联扩展是一种优化,其中函数调用被重复的指令集替换.声明一个内联函数就是向链接器声明该函数的处

使用模板与内联的 C++ 元编程

是否值得编写如下代码来复制数组元素:#includeusingnamespacestd;templatestructRepeat{staticvoidcopy(int*x,int*y){x[START+N-1]=y[START+N-1];Repeat::copy(x,y);}};templatestructRepeat{staticvoidcopy(int*x,int*y){x[START]=y[START];}};intmain(){inta[10];intb[10];//initializefor(inti=0;i::copy(a,b);//showfor(inti=0;i还是使用

c++ - 没有必要导出只有虚函数/内联函数的类?

在Win32上的C++中:假设我有一个带有声明类的头文件的DLL。DLL导出一些获取指向该类实例的指针/引用的方法,例如工厂函数。如果一个人只打算在其实例上调用虚函数或内联函数,那么我认为没有必要使用__declspec将该类标记为导出类是否正确?反之,调用非虚成员函数是否需要导出类声明? 最佳答案 AmIcorrectinbelievingthatitisnotnecessarytomarkthatclassasexportedusing__declspecifoneisonlygoingtocallvirtualorinline

c++ - 是否可以将内联函数的声明和定义分开?

我需要定义内联函数来提高代码的性能。目前函数声明在.h文件中,定义在.cpp文件中。我在每个函数声明的前面添加了inline关键字,但出现链接错误。是否可以将内联函数的声明和定义分开? 最佳答案 您可以很好地将声明和定义分开,但是该定义必须在使用该函数的每个翻译单元中可用,例如:#includeinlinevoidfoo();intmain(){foo();}inlinevoidfoo(){std::cout完全合法且正确。n3290§7.1.2.4的确切引述是:Aninlinefunctionshallbedefinedineve

c++ - 函数指针比内联函数运行得更快。为什么?

我在我的计算机(Inteli3-3220@3.3GHz,Fedora18)上运行了一个基准测试,得到了意想不到的结果。函数指针实际上比内联函数快一点。代码:#include#includeinlineshorttoBigEndian(shorti){return(i>8);}short(*toBigEndianPtr)(shorti)=toBigEndian;intmain(){std::chrono::durationt;inttotal=0;for(inti=0;i>(end-begin);}std::cout编译为g++test.cpp-std=c++0x-O0“toBigEnd

c++ - 为什么强制内联函数会导致性能不佳?

这个问题在这里已经有了答案:Whatiswrongwithusinginlinefunctions?(13个答案)关闭7年前。如果我内联一个函数。函数调用主体将被复制,而不是向它发出call()。为什么这会导致性能不佳?编辑:那么由于大函数导致的缓存未命中怎么办?为什么存在“仅内联函数最多3行”的经验法则?